package cn.dao;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

import cn.utils.PageModel;




	public interface CommonDAO {

	/**
	 *
	 * @param obj 传入需要保存的实体
	 * @author gshg
	 */
	public void saveDemo(Object obj);



	/**
	 *
	 * @param obj 传入需要更新的实体
	 * @author gshg
	 *
	 */
	public void updateDemo(Object obj);


	/**
	 *
	 * @param obj 传入需要删除的实体
	 * @author gshg
	 *
	 */
	public void deleteDemo(Object obj);


	/**
	 * 批量删除,按ID
	 * @param id 要删除数据的ID
	 * @param objID 要删除数据ID的类型，为String或INteger；
	 * @param obj 所删除的实体类型
	 */
	public void deleteBacthDemo(Object[] id,Object objID,Object obj);

	/**
	 *
	 * @param id  String类型，需要查找的实体的主键（String类型）
	 * @param obj 需要查询的实体类
	 * @return Object 实际是查询出来的实体
	 * @author gshg
	 */
	public <T extends Serializable> T findByStringId(String id, T t);


	/**
	 *
	 * @param id  int类型，需要查找的实体的主键（int类型）
	 * @param T 需要查询的实体类
	 * @return T 实际是查询出来的实体
	 * @author gshg
	 */
	public <T extends Serializable> T  findByIntId(int id, T t);


	/**
	 *
	 * @param hql  传入来的查询语句
	 * @param parem 需要匹配的参数
	 * @return List 返回查询出来的List
	 * @author gshg
	 */
	public List findListByHql(String hql,Object[] param);


	/**
	 *
	 * @param sql  做批量修改或删除的sql语句
	 * @return  true OR false 操作成功返回TRUE 失败返回FALSE
	 * @author gshg
	 */
	public boolean updateOrDeleteBysql(final String sql);

	/**
	 * @说明  该接口用来做查询的分页。
	 * @param hql 传递进来的查询语句，该语句在service层进行组装
	 * @param pm 传递进来的分页模板，主要是currentPage（当前页），pageSize（每页显示的记录数）
	 * @return PageModel 把当前页的分页信息以及返回的分页记录集（List）set到里面
	 * @author gshg
	 */
	public PageModel findByPage(String hql,PageModel pm);



	/**
	 * 该方法主要是用来实现统计某一个熟悉的总值
	 * @param hql
	 * @return  统计值
	 * @author mzl
	 */
	public double  Stasistics(String hql);


	 /**
     * @author gshg
     * @param objs 增加或修改的实体集合(实体集合可以是List，Set，Collection)
     */
    public   void  saveOrUpdateAll(Collection   objs);


    /**
     * @author gshg
     * @param objs 要删除的实体集合(实体集合可以是List，Set，Collection)
     */
    public void deleteAll(Collection objs);


    //public void updateBacthById()
    
    
}
